﻿#include "Mainwindow.h"

#define ISNAVIGATION 1

Mainwindow::Mainwindow(QWidget* parent)
	:QWidget(parent)
{
	init();


	//蒙层初始化：
	MaskWidget::instance()->setMainWidget(this);
}

void Mainwindow::init()
{
	mainwindowinit();
}

void Mainwindow::mainwindowinit()
{
	this->setWindowIcon(QIcon(":/ClientResource/a.ico"));
	this->setWindowTitle("User_authority_management_system-Client");
	this->resize(1140, 520);
	this->setStyleSheet("background-color:rgb(60,60,60)");


	//菜单和状态栏设计：
#if ISNAVIGATION
	navigationBarlayout();
#else
	treenavBarlayout();
#endif


	//侧边显示框设计：
	sidedisplayframeinit();
}

void Mainwindow::navigationBarlayout()
{
	/*
	QStackedWidget	用于在同一个区域显示多个子窗口，但一次只显示其中一个;
	通过在 QStackedWidget 中添加子窗口小部件，你可以在运行时动态地切换显示哪个子窗口。这对于实现向导式界面或者包含多个页面的应用程序非常有用
*/
	m_stackedwidget = new QStackedWidget;

	m_navigationBar = new NavigationBar;
	m_navigationBar->setMinimumWidth(180);

	//垂直布局：
	auto hlayout = new QHBoxLayout(this);
	hlayout->addWidget(m_navigationBar);
	hlayout->addWidget(m_stackedwidget);

	//添加按钮：
	m_navigationBar->setHeader("User权限管理System");
	m_navigationBar->addNavigation(QIcon(":/ClientResource/user.png"), "用户管理");
	m_navigationBar->addNavigation(QIcon(":/ClientResource/role.png"), "角色管理");
	m_navigationBar->addNavigation(QIcon(":/ClientResource/privilege.png"), "权限管理");

	//设置侧边显示栏的默认选中按钮：
	auto button = m_navigationBar->Navigation(0);
	if (button)
	{
		button->setChecked(true);			//设置侧边栏的一项默认被选中
	}


	connect(m_navigationBar, &NavigationBar::idClicked, [=](int id)
		{
			qDebug() << "cilcked id >" << id;

			//侧边栏，不同的管理不同的窗口：
			if (0 == id)						//用户管理
			{
				////如果QStackedWidget 里没有这个窗口，再添加：
				//if (-1 == m_stackedwidget->indexOf(m_sidedisplayframe))
				//{
				//	//把侧边显示框窗体传给QStackedWidget	用于在同一个区域显示多个子窗口:
				//	m_stackedwidget->addWidget(m_sidedisplayframe);
				//}
				//如果已经存在了，那就让QStackedWidget显示当前的窗口：
				if (-1 != m_stackedwidget->indexOf(m_sidedisplayframe))
				{
					m_stackedwidget->setCurrentWidget(m_sidedisplayframe);
				}

			}
			else if (1 == id)					//角色管理
			{
				if (-1 != m_stackedwidget->indexOf(m_widget))
				{
					m_stackedwidget->setCurrentWidget(m_widget);
				}
			}
			else								//权限管理
			{
				if (-1 != m_stackedwidget->indexOf(m_widget))
				{
					m_stackedwidget->setCurrentWidget(m_widget);
				}
			}

		});

}

void Mainwindow::treenavBarlayout()
{
	/*
		QStackedWidget	用于在同一个区域显示多个子窗口，但一次只显示其中一个; 
		通过在 QStackedWidget 中添加子窗口小部件，你可以在运行时动态地切换显示哪个子窗口。这对于实现向导式界面或者包含多个页面的应用程序非常有用
	*/
	m_stackedwidget = new QStackedWidget;

	m_treenavbar = new QTreeWidget;
	m_treenavbar->setFixedWidth(280);

	//垂直布局：
	auto hlayout = new QHBoxLayout(this);
	hlayout->addWidget(m_treenavbar);
	hlayout->addWidget(m_stackedwidget);


	QTreeWidgetItem* item = nullptr;

	//添加头项：
	item = new QTreeWidgetItem({ "UserAuthorityManagerSystem" });
	item->setIcon(0,QIcon(":/ClientResource/privilege_header.png"));
	m_treenavbar->setHeaderItem(item);
	//添加其他：
	item = new QTreeWidgetItem(m_treenavbar, { "用户管理" }, 0);
	item->setIcon(0, QIcon(":/ClientResource/user.png"));
	item = new QTreeWidgetItem(m_treenavbar, { "角色管理" }, 1);
	item->setIcon(0, QIcon(":/ClientResource/role.png"));
	item = new QTreeWidgetItem(m_treenavbar, { "权限管理" }, 2);
	item->setIcon(0, QIcon(":/ClientResource/privilege.png"));


	//设置样式表：
	QFile file(":/ClientResource/sytle.css");
	if (file.open(QIODevice::ReadOnly))
	{
		setStyleSheet(file.readAll());
	}


	connect(m_treenavbar, &QTreeWidget::itemClicked, [](QTreeWidgetItem* item)
		{
			qDebug() << item->type();
		});
	
}

void Mainwindow::sidedisplayframeinit()
{
	m_sidedisplayframe = new SideDisplayFrame;
	//把侧边显示框窗体传给QStackedWidget	用于在同一个区域显示多个子窗口:
	m_stackedwidget->addWidget(m_sidedisplayframe);

	m_widget = new QWidget;
	m_stackedwidget->addWidget(m_widget);
}


